#include "administrator.h"


Administrator administrator[MAX_ADMINISTRATOR];
size_t cnt_administrator;


Logistics logistics[MAX_LOGISTICS];
size_t cnt_logistics;


Vip vip[MAX_VIP];
size_t cnt_vip;


Payment payment[MAX_PAYMENT];
size_t cnt_payment;
//查找后勤账号
int query_logistics(const char* name)
{
	for(int i=0;i<cnt_logistics;i++)
	{
		if(0==strcmp(logistics[i].name,name))
		{
			return i;
		}
	}
	return -1;

}

//查找vip账号
int query_vip(const char* name)
{
	for(int i=0;i<cnt_vip;i++)
	{
		if(0==strcmp(vip[i].name,name))
		{
			return i;
		}
	}
	return -1;
}
//添加后勤账户
void enroll_logistics(void)
{
	if(cnt_logistics >= MAX_LOGISTICS)
	{
		print_sec("用户数量已满，无法添加！",0.75);
		return;
	}
	// 输入用户名
	printf("请输入用户名：");
	get_str(logistics[cnt_logistics].name,sizeof(logistics[cnt_logistics].name));
	// 检查用户名是否被占用
	int index = query_logistics(logistics[cnt_logistics].name);
	if(-1 < index)
	{
		print_sec("该用户已存在！",0.75);
		return;
	}
	// 输入密码
	printf("请输入密码：");
	get_passwd(logistics[cnt_logistics].passwd,sizeof(logistics[cnt_logistics].passwd));
	// 再一次输入密码
	char repasswd[7];
	printf("请输入再一次输入密码：");
	get_passwd(repasswd,sizeof(repasswd));
	// 确认密码
	if(strcmp(logistics[cnt_logistics].passwd,repasswd))
	{
		print_sec("两次输入的密码不符，注册失败！",0.75);
		return ;
	}
	// 输入电话号
	printf("请输入用于找回密码的手机号：");
	get_phone(logistics[cnt_logistics].phone,sizeof(logistics[cnt_logistics].phone));
	cnt_logistics++;
}

//注销后勤账户
void logoff_logistics(void)
{
	// 输入用户名
	char name[20];
	printf("请输入用户名：");
	get_str(name,sizeof(name));
	// 查询用户是否存在
	int index = query_logistics(name);
	if(-1 == index)
	{
		print_sec("该用户不存在！",0.75);
		return;
	}
	// 输入密码
	char passwd[7];
	printf("请输入密码：");
	get_passwd(passwd,sizeof(passwd));
	// 比较密码
	if(0 == strcmp(logistics[index].passwd,passwd))
	{
		if(yes_or_no())
		{
			// 把最后一个用户移动给要删除的用户位置
			logistics[index] = logistics[cnt_logistics-1];
			// 用户数量减1
			cnt_logistics--;
			print_sec("注销用户成功！",0.75);
			return ;
		}
		else
		{
			print_sec("取消注销操作！",0.75);
			return ;
		}
	}
}

//修改信息
void modify_logistics(void)
{
	// 输入用户名
	char name[20];
	printf("请输入用户名：");
	get_str(name,sizeof(name));

	// 查询用户是否存在
	int index = query_logistics(name);
	if(-1 == index)
	{
		print_sec("该用户不存在！",0.75);
		return;
	}

	// 输入密码
	char passwd[7];
	printf("请输入密码：");
	get_passwd(passwd,sizeof(passwd));

	// 比较密码
	if(0 == strcmp(logistics[index].passwd,passwd))
	{
		printf("请输入用户电话：");
		get_phone(logistics[index].phone,sizeof(logistics[index].phone));
		print_sec("修改用户信息成功！",0.75);
	}
}

//遍历
void show_logistics(void)
{
	printf("用户名   密码       联系电话     \n");
	for(int i=0; i<cnt_logistics; i++)
	{
		printf("%s       %6s     %11s \n",
				logistics[i].name,
				logistics[i].passwd,
				logistics[i].phone);
	}
	anykey_continue();
}

//添加vip
void enroll_vip(void)
{
	if(cnt_vip >= MAX_VIP)
	{
		print_sec("用户数量已满，无法添加！",0.75);
		return;
	}
	// 输入用户名
	printf("请输入用户名：");
	get_str(vip[cnt_vip].name,sizeof(vip[cnt_vip].name));
	// 检查用户名是否被占用
	int index = query_vip(vip[cnt_vip].name);
	if(-1 < index)
	{
		print_sec("该用户以存在！",0.75);
		return;
	}

	// 输入密码
	printf("请输入密码：");
	get_passwd(vip[cnt_vip].passwd,sizeof(vip[cnt_vip].passwd));
	// 再一次输入密码
	char repasswd[7];
	printf("请输入再一次输入密码：");
	get_passwd(repasswd,sizeof(repasswd));

	// 确认密码
	if(strcmp(vip[cnt_vip].passwd,repasswd))
	{
		print_sec("两次输入的密码不符，注册失败！",0.75);
		return;
	}

	// 输入电话号
	printf("请输入用于找回密码的手机号：");
	get_phone(vip[cnt_vip].phone,sizeof(vip[cnt_vip].phone));
	cnt_vip++;
	
}
//注销vip账户
void logoff_vip(void)
{
	// 输入用户名
	char name[20];
	printf("请输入用户名：");
	get_str(name,sizeof(name));

	// 查询用户是否存在
	int index = query_vip(name);
	if(-1 == index)
	{
		print_sec("该用户不存在！",0.75);
		return;
	}

	// 输入密码
	char passwd[7];
	printf("请输入密码：");
	get_passwd(passwd,sizeof(passwd));

	// 比较密码
	if(0 == strcmp(vip[index].passwd,passwd))
	{
		if(yes_or_no())
		{
			// 把最后一个用户移动给要删除的用户位置
			vip[index] = vip[cnt_vip-1];
			// 用户数量减1
			cnt_vip--;
			print_sec("注销用户成功！",0.75);
			return ;
		}
		else
		{
			print_sec("取消注销操作！",0.75);
			return ;
		}
	}
}

//修改信息
void modify_vip(void)
{
	// 输入用户名
	char name[20];
	printf("请输入用户名：");
	get_str(name,sizeof(name));

	// 查询用户是否存在
	int index = query_vip(name);
	if(-1 == index)
	{
		print_sec("该用户不存在！",0.75);
		return;
	}

	// 输入密码
	char repasswd[7];
	printf("请输入密码：");
	get_passwd(repasswd,sizeof(repasswd));

	// 比较密码
	if(0 == strcmp(vip[index].passwd,repasswd))
	{
		for(;;)
		{
			system("clear");
			puts("1、兑换物品");
			puts("2、修改信息");
			puts("0、返回");
			switch(get_cmd('0','9'))
			{
				case '1':
					printf("您有%.2f积分\n",vip[index].points);
					printf("请选择要换物品的积分!\n");
					float repoints;
					scanf("%f",&repoints);
					vip[index].points-=repoints;	
					printf("您还有.%2f积分\n",vip[index].points);
					print_sec("兑换成功！",0.75);
					break;
				case '2':printf("请输入用户电话：");
						 get_phone(vip[index].phone,sizeof(vip[index].phone));
						 print_sec("修改用户信息成功！",0.75);break;
				case '3':return;
			}
		}
	}
}

//遍历
void show_vip(void)
{
	printf("用户名   密码       联系电话     积分\n");
	for(int i=0; i<cnt_vip; i++)
	{
		printf("%s       %6s    %11s    %.2f\n",
				vip[i].name,
				vip[i].passwd,
				vip[i].phone,
				vip[i].points);
	}
	anykey_continue();
}


//查看收款记录
void view_payment(void)
{
	printf("商品名称 出售数量 收款\n");
	for(int i=0; i<cnt_payment; i++)
	{
		printf("付款账户： %12s 商品名称： %s 出售数量： %d 收款：%.2f 收款账户： %12s\n",
				payment[i].phone,
				payment[i].goods_name,
				payment[i].num,
				payment[i].crediting,
				administrator[cnt_administrator-1].phone);
	}
	anykey_continue();

}

//后勤主界面
void menu_logistics(void)
{
	
	for(;;)
	{
		system("clear");
		puts("****后勤系统****");
		puts("1、添加后勤账户");
		puts("2、注销后勤账户");
		puts("3、修改信息");
		puts("4、遍历");
		puts("0、返回");
		switch(get_cmd('0','9'))
		{	
		case '1':enroll_logistics();break;
		case '2':logoff_logistics();break;
		case '3':modify_logistics();break;
		case '4':show_logistics();break;
		case '0':return;
		}
	}
}

//vip主界面
void menu_vip(void)
{
	for(;;)
	{
		system("clear");
		puts("****vip系统****");
		puts("1、添加vip账户");
		puts("2、注销vip账户");
		puts("3、兑换物品，修改信息");
		puts("4、遍历");
		puts("0、返回");
		switch(get_cmd('0','9'))
		{
		case '1':enroll_vip();break;
		case '2':logoff_vip();break;
		case '3':modify_vip();break;
		case '4':show_vip();break;
		case '0':return;
		}
	}
}

//收款系统
void menu_payment(void)
{

	for(;;)
	{
		system("clear");	
		puts("****收款系统****");
		puts("1、查看收款记录");
		puts("0、返回");
		switch(get_cmd('0','9'))
		{
		case '1':view_payment();break;
		case '0':return;
		}
	}
}

//管理员界面
void menu_administrator(void)
{
	for(;;)
	{
		system("clear");
		puts("****管理系统****");
		puts("1、管理后勤");
		puts("2、管理vip");
		puts("3、收款账户管理");
		puts("0、退出系统");
		switch(get_cmd('0','9'))
		{
		case '1':menu_logistics();break;
		case '2':menu_vip();break;
		case '3':menu_payment();break;
		case '0':return;

		}
	}
}
//注册管理员
void enroll_administrator(void)
{
	if(MAX_ADMINISTRATOR<=cnt_administrator)
	{
		print_sec("已注册管理员用户！",0.75);
		return;
	}
	printf("请输入用户名：");
	get_str(administrator[cnt_administrator].name,sizeof(administrator[cnt_administrator].name));
	// 输入密码
	printf("请输入密码：");
	get_passwd(administrator[cnt_administrator].passwd,sizeof(administrator[cnt_administrator].passwd));
	// 再一次输入密码
	char repasswd[7];
	printf("请输入再一次输入密码：");
	get_passwd(repasswd,sizeof(repasswd));
	// 确认密码
	if(strcmp(administrator[cnt_administrator].passwd,repasswd))
	{
		print_sec("两次输入的密码不符，注册失败！",0.75);
		return;
	}
	// 输入电话号
	printf("请输入用于找回密码的手机号：");
	get_phone(administrator[cnt_administrator].phone,sizeof(administrator[cnt_administrator].phone));
	print_sec("管理员注册成功!",0.75);
	cnt_administrator++;
}

//登录管理员系统
void login_administrator(void)
{
	//输入用户名
	char rename[20];
	printf("请输入用户名：");
	get_str(rename,sizeof(rename));
	if(0==strcmp(administrator[cnt_administrator-1].name,rename))
	{
		// 输入密码
		char repasswd[7];
		printf("请输入输入密码：");
		get_passwd(repasswd,sizeof(repasswd));

		//检查用户名和密码是否正确
		if(0==strcmp(administrator[cnt_administrator-1].passwd,repasswd))
		{
			print_sec("登陆成功！",0.75);
			menu_administrator();
			return;
		}
		else
		{
			print_sec("密码错误！",0.75);
			return;
		}
	}
	else
	{
		print_sec("用户名错误！",0.75);
		return;
	}
}
void menu(void)
{
	system("clear");
	puts("****欢迎使用****");
	puts("1、管理员注册");
	puts("2、管理员登录");
	puts("3、后勤登录");
	puts("4、收银");
	puts("0、退出系统");
}
